Skip to content

release: 0.11.0#330

Open
stainless-app[bot] wants to merge 92 commits intomainfrom
release-please--branches--main--changes--next
Open

release: 0.11.0#330
stainless-app[bot] wants to merge 92 commits intomainfrom
release-please--branches--main--changes--next

Conversation

@stainless-app
Copy link
Copy Markdown
Contributor

@stainless-app stainless-app Bot commented Apr 21, 2026

Automated Release PR

0.11.0 (2026-04-29)

Full Changelog: v0.10.2...v0.11.0

Features

Bug Fixes

  • use correct field name format for multipart file arrays (44078f4)

Chores

  • internal: more robust bootstrap script (dd59283)

This pull request is managed by Stainless's GitHub App.

The semver version number is based on included commit messages. Alternatively, you can manually set the version number in the title of this pull request.

For a better experience, it is recommended to use either rebase-merge or squash-merge when merging this pull request.

🔗 Stainless website
📚 Read the docs
🙋 Reach out for help or questions

Greptile Summary

This automated release PR bumps the SDK from 0.10.2 to 0.11.0 with three substantive changes: (1) a new AGENTEX_CUSTOM_HEADERS env-var feature for injecting headers without code changes, (2) a bug fix making multipart file-array field names respect a configurable array_format, and (3) an API update removing task_id from all span endpoints. All changes are generated by Stainless and appear clean, with only two minor P2 findings.

Confidence Score: 5/5

Safe to merge — all remaining findings are P2 style/robustness items with no impact on the primary code paths

No P0 or P1 issues found. The two P2 findings are: a silent header-drop edge case when default_headers is a tuple list alongside the env var (uncommon usage pattern), and a weakened test assertion that drops the field-name key check. Neither affects production behaviour for typical SDK consumers.

src/agentex/_client.py (header merging edge case) and tests/test_files.py (weakened assertion)

Important Files Changed

Filename Overview
src/agentex/_client.py Adds AGENTEX_CUSTOM_HEADERS env-var parsing for both sync and async clients; non-mapping default_headers are silently dropped when the env var is present (P2)
src/agentex/_utils/_utils.py Adds array_format parameter to extract_files/_extract_items; default "brackets" preserves backward compatibility; new _array_suffix helper cleanly handles all four format modes
src/agentex/resources/spans.py Removes task_id parameter from create/update/list methods in both sync and async resources; consistent with OpenAPI spec update
src/agentex/_types.py Moves ArrayFormat and NestedFormat type aliases here from _qs.py to avoid circular imports and improve reuse
tests/test_extract_files.py Adds parametrized test covering all four array_format values for both top-level and nested array paths
tests/test_files.py Weakens deepcopy assertion to check file values only, dropping the field-name key check (P2)
scripts/bootstrap Uses ${SKIP_BREW:-} instead of $SKIP_BREW to avoid "unbound variable" failures under set -u

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Client.__init__] --> B{AGENTEX_CUSTOM_HEADERS set?}
    B -- No --> E[Pass default_headers as-is to super]
    B -- Yes --> C[Parse newline-delimited Key: Value pairs]
    C --> D{is_mapping_t default_headers?}
    D -- Yes --> F["Merge: {**parsed, **default_headers}"]
    D -- No --> G["Use parsed only (explicit headers dropped)"]
    F --> E
    G --> E

    H[extract_files call] --> I{array_format param}
    I -- brackets --> J["field[] for each item"]
    I -- indices --> K["field[0], field[1], ..."]
    I -- repeat/comma --> L["field (bare, repeated)"]
Loading

Fix All in Cursor Fix All in Claude Code Fix All in Codex

Prompt To Fix All With AI
This is a comment left during a code review.
Path: src/agentex/_client.py
Line: 137

Comment:
**Non-mapping `default_headers` silently dropped**

When `AGENTEX_CUSTOM_HEADERS` is set and the caller passes `default_headers` as a list of `(name, value)` tuples (a valid `HeadersLike` form), `is_mapping_t` returns `False`, the explicit headers are silently ignored, and only the env-derived headers survive. Any caller using tuple-style headers would lose them without warning.

Consider handling the sequence-of-tuples case explicitly, or at minimum documenting that `default_headers` must be a mapping when the env var is active.

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: tests/test_files.py
Line: 134

Comment:
**Assertion weakened — field-name keys no longer verified**

The previous assertion `extracted == [("items[][file]", file1), ("items[][file]", file2)]` checked both the field name and the file value. The new assertion only checks values and silently ignores whatever keys `extract_files` emits. If the key logic ever regresses (e.g., produces `"items[file]"` or `""` instead of `"items[][file]"`), this test would still pass.

Consider restoring the key check alongside the existing value check:
```suggestion
        assert extracted == [("items[][file]", file1), ("items[][file]", file2)]
```

How can I resolve this? If you propose a fix, please make it concise.

Reviews (89): Last reviewed commit: "release: 0.11.0" | Re-trigger Greptile

@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 91abc1a to de14ac0 Compare April 21, 2026 17:20
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from de14ac0 to e88491a Compare April 21, 2026 18:20
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from e88491a to 3432a16 Compare April 21, 2026 20:20
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 3432a16 to d09931b Compare April 21, 2026 22:20
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from d09931b to caf0668 Compare April 22, 2026 02:20
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from caf0668 to 1bb322c Compare April 22, 2026 08:20
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 1bb322c to e423419 Compare April 22, 2026 10:20
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from e423419 to 8a63a77 Compare April 22, 2026 11:20
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 8a63a77 to 9ccf90e Compare April 22, 2026 13:20
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 9ccf90e to dc63a90 Compare April 22, 2026 14:03
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from dc63a90 to 9dc2cc1 Compare April 22, 2026 16:20
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 9dc2cc1 to 89702a7 Compare April 22, 2026 18:20
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 89702a7 to 341713c Compare April 23, 2026 00:20
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 341713c to 4fd88a7 Compare April 23, 2026 03:20
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 2861de8 to bc750c9 Compare April 27, 2026 15:00
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from bc750c9 to 471c0b9 Compare April 27, 2026 15:21
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 471c0b9 to 08e41f5 Compare April 27, 2026 17:21
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 08e41f5 to f53228b Compare April 27, 2026 21:21
@stainless-app
Copy link
Copy Markdown
Contributor Author

stainless-app Bot commented Apr 27, 2026

🧪 Testing

To try out this version of the SDK:

pip install 'https://pkg.stainless.com/s/agentex-sdk-python/57a862c8543f67a6cdc62dc9da623467676d2c53/agentex_sdk-0.10.2-py3-none-any.whl'

Expires at: Wed, 27 May 2026 22:27:04 GMT
Updated at: Mon, 27 Apr 2026 22:27:04 GMT

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants